#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <unistd.h>
#include "../include/common.h"

/**
 * @brief 打印提示
 */
void printPrompt();

/**
 * @brief 从标准输入读取一个字符串
 * 
 * 对fgets的包装函数
 * 自动计算字符串长度，将末位修改为'\0'
 * 并检查输入错误与字符串长度，
 * 
 * @param str 输出参数，指向用于储存字符串的类型地址
 * @param n 字符串最大长度
 * @return int 执行状态码
 * 			- 0: 成功读取字符串
 * 			- 1: 输入错误 （fgets失败）
 * 			- 2: 字符串长度太短;
 */
int Fgets(char *str, int n);

/**
 * @brief 从标准输入读取一个整数
 * 
 * 该函数从标准输入读取一行字符串，并将其转换为整数。
 * 使用fgets获取输入以避免缓冲区溢出，使用strtol进行安全的字符串转换，
 * 并提供详细的错误检查。
 * 
 * @param value 输出参数，指向用于存储读取到的整数的内存地址
 * @return int 执行状态码：
 *            - 0: 成功读取并转换整数
 *            - 1: 输入错误（fgets失败）
 *            - 2: 转换失败（输入包含非法字符或为空）
 */
int ReadInt(int *value);

/**
 * @brief 使用Vim编辑器读取文本输入
 * 
 * 该函数调用外部Vim编辑器让用户输入文本，然后将编辑的内容复制到指定缓冲区。
 * 会自动处理字符串末尾的换行符。
 * 
 * @param str 输出参数，指向用于存储输入文本的字符缓冲区
 * @param n 缓冲区str的最大容量（包括字符串终止符）
 * @return int 执行状态码：
 *            - 0: 成功读取并处理文本
 *            - -1: 输入错误或输入内容过短（长度<=1）
 */
int ReadText(char *str, int n);

/**
 *  @brief 使用标准输出强制从当前行头部打印
 * 	
 * 	颜色蓝色
 */
void format_print(char *message);

/**
 *  @brief 使用标准输出强制从当前行头部打印
 * 	
 * 	用于打印错误信息
 * 	颜色红色
 */
void format_err(char *message);

// 引导用户输入

int get_buy_args(Command *cmd);

int get_login_args(Command *cmd);

int get_sell_args(Command *cmd);

int get_view_args(Command *cmd);
